#include <iostream>
#include <signal.h>
#include <unistd.h>

using std::cout;
using std::endl;

// 判断内核是先判断是否阻塞，还是先忽略信号
// 同时设置一个信号的忽略和阻塞，得到结论：首先内核先判断当前信号是否阻塞，之后再忽略信号

int main(int args, char *argv[])
{
    // 设置 SIGINT 信号为忽略
    signal(SIGINT, SIG_IGN);
    sigset_t sigs{};
    // 将二号信号设置为阻塞信号
    sigaddset(&sigs, SIGINT);
    sigprocmask(SIG_BLOCK, &sigs, nullptr); 
    sleep(5);

    sigemptyset(&sigs);
    // 将阻塞的进程取出来
    sigpending(&sigs);
    if(sigismember(&sigs, SIGINT)){
        printf("SIGINT is pending\n");
    }else{
        printf("SIGINT is not pending\n");
    }

    return 0;
}